package plugins.imageViewer;

import java.awt.GridLayout;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import annotation.Menu;

import interfaces.PluginInterface;
/**
 * La classe ImageViewer permet d'ajouter un plugin gérant l'ouverture de fichiers
 * images dans une visionneuse d'images.
 *
 */
public class ImageViewer implements PluginInterface {

	boolean parDefaut =true;
	
	@Menu(libelle="Image")	
	@Override
	public JPanel getFrameDetail() {
		JPanel p = new JPanel();
		p.setLayout(new GridLayout(10, 3));
		p.add(new JLabel("Details      : Image"));
		p.add(new JLabel("Version     : "+getVersion()));
		StringBuilder extension = new StringBuilder("");
		for(String e : getExtension())
			extension.append(" | "+e);
		p.add(new JLabel("Extension : "+extension));
		if(isDefault())
			p.add(new JLabel("par défaut  : Oui"));
		
		return p;
	}

	@Override
	public String[] getExtension() {
		
		return new String[]{"jpg","JPG","jpeg","JPEG","png","PNG","gif","GIF","bmp","BMP"};
	}

	@Override
	public String getVersion() {
		
		return "1.0";
	}

	 /**
     * Récupère les fichiers de type images dans un repertoire 
     * 
     * @param file
     *            le fichier à ouvrir
     * 
     * @return ArrayList<File> la liste des fichiers de type image
     */
	public ArrayList<File> getPhotosRepertoire(File o)
	{
		File dossier = o.getParentFile();
		File[] fichiers = dossier.listFiles();
		String[] extensionsGerees = this.getExtension();
		ArrayList<File> fichiersDisponibles = new ArrayList<File> ();
		//fichiersDisponibles.add(o);
		for(int i=0;i<fichiers.length;i++)
		{
			File f = fichiers[i];
			String fullPath = f.getPath();
			
			int dot = fullPath.lastIndexOf(".");
			String extension = fullPath.substring(dot + 1);
		
			for(int j=0;j<extensionsGerees.length;j++)
			{
				if(extensionsGerees[j].equals(extension) == true && !f.getName().equals(o.getName()) )
				{
					fichiersDisponibles.add(f);
				}
			}
		}
		
		for(int i=0;i<fichiersDisponibles.size();i++)
		{
			System.out.println(fichiersDisponibles.get(i));
		}
		
		return fichiersDisponibles;
	}
	
	
	
	@Override
	public JFrame getFrame(File o) {
		Picture pic = new Picture(o);

		ArrayList<File> photosDisponibles = getPhotosRepertoire(o);	
		pic.navigationBoutons(photosDisponibles);
		pic.show();


		return pic.show();

	}

	@Override
	public boolean isDefault() {
		
		return parDefaut;
	}
	
	
	@Override
	public void setDefault(boolean bool) {
		parDefaut = bool;
		
	}
	
	@Override
	public ImageIcon getIcon() {
		return new ImageIcon("../Plugin/bin/plugins/imageViewer/ImageViewer.png");
	}

}
